# Поиск элементов на странице
# Все примеры выполнены в браузерe Chrome.
#
# Вы можете находить элементы на веб-странице различными способами: используя HTML-теги, CSS-селекторы,
# атрибуты и их значения.
#
# Вот некоторые примеры:
# Вот некоторые примеры:
#
# id="name_id": по идентификатору;
# class="name_class": по имени класса;
# <div>: по имени тега;
# href="link": по атрибуту;
# name="item": по значению атрибута.

#
# Поиск по #id
#
# Символ "#" служит базовым селектором для поиска элементов по значению атрибута id. Этот метод особенно удобен,
# так как каждый id на веб-странице является уникальным. Следовательно, можно быть уверенным, что в HTML-документе
# найдется только один элемент с указанным id.

#Для выполнения поиска по id применяется синтаксис вида #значение_атрибута.
# В качестве примера возьмем #brand. Для закрепления материала, попробуйте осуществить поиск по
# id на различных тегах самостоятельно по ссылке ниже.

# Альтернативно, можно воспользоваться синтаксисом с квадратными скобками: [id='brand']. Этот метод дает
# такой же результат, как и #brand, но требует ввода большего количества символов. Выбор метода зависит
# # от ваших личных предпочтений и сценария использования.
#
# Понимание работы с селектором # является ключевым моментом при разработке парсера. Отобранный по id элемент
# # чаще всего служит ключевой точкой доступа к# конкретному тегу и информации на странице. Поскольку id уникален,
# # ошибочный сбор данных исключается, что # существенно повышает надежность вашего парсера.



#####################################################################################################
#Поиск по .class
#
# Символ "." является базовым селектором, позволяющим выбирать элементы по имени класса. Синтаксис весьма прост и
# понятен: .имя_класса, например, .description. Как альтернатива, можно использовать синтаксис с квадратными
# скобками: [class="headers"].

# Важно отметить, что при использовании селектора класса возможно получение нескольких элементов, поскольку один и
# тот же класс может быть присвоен разным элементам на странице. Это отличает поиск по классу от поиска по id, где
# каждый идентификатор уникален.

# Для парсинга это означает, что если ваша цель — получить все элементы с определенным классом, данный метод будет
# крайне полезен. Но если необходимо найти конкретный элемент, возможно, придется дополнительно фильтровать результаты
# или использовать другие селекторы для уточнения поиска.

# Поиск по имени тега
#
# Самый простой способ отыскать определённый тег — это ввести его имя в строке поиска разработчика браузера. Например,
# headers или div. Этот метод особенно полезен, если вам нужно получить все элементы данного типа на странице — например,
# все абзацы, обозначенные тегом <p>.

#
# Если вы ищете тег, состоящий из одного символа, такой как a или p, будьте осторожны: в результатах поиска появятся
# не только соответствующие теги, но и все вхождения этих символов в тексте на странице.  или

# Для точного поиска только тегов используйте угловые скобки в вашем запросе, например: <a> или <p>.
#
# Метод поиска по имени тега является одним из наиболее базовых и распространённых в парсинге. Он часто используется
# в качестве отправной точки для дальнейшего уточнения селекторов или комбинирования с другими методами поиска. Однако,
# следует помнить о тонкостях, таких как вхождение символов в текст, чтобы избежать неточностей и ошибок при сборе данных


# Комбинированный поиск: ищем все абзацы с классом "my_class" и атрибутом "data-example"

#soup.select('p.my_class[data-example]')
from bs4 import BeautifulSoup
import requests

#Получаем содержимое веб-страницы
response = requests.get('https://parsinger.ru/2.1/DOM/example.html')
response.encoding = 'utf-8' # Устанавливаем кодировку веб-страницы
soup = BeautifulSoup(response.text, 'html.parser')

paragraphs = soup.select('p.my_class')

for p in paragraphs:
    print(f'Найденный элемент: {p.text}')



#Поиск по значению атрибута name="item"

# В этом разделе мы уже коснулись использования квадратных скобок для поиска элементов по class и id. Однако
# это лишь вершина айсберга: квадратные скобки позволяют выполнять поиск по любым атрибутам и их значениям. Например
# для поиска элемента с атрибутом name равным "4_1", вы можете применить синтаксис [name="4_1"]. И вы будете абсолютно
# правы в своём выборе.

# Необходимо учитывать, что такой метод поиска вернет все элементы с указанным атрибутом на веб-странице.
# Это может оказаться полезным, если вам нужно собрать все подобные элементы, но также может вызвать недочеты в
# сборе данных, если ваша задача требует большей специфичности.




















